package org.monster.context.core;

import org.monster.context.reader.tag.ServletTag;

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 服务者配置缓存
 *
 * @author Monster
 */
public class ServletConfigCache {

    /**
     * 标签 键值
     */
    private static final Map<String, List<ServletTag>> tags = new HashMap<>();
    /**
     * 服务者配置
     */
    private static ServletConfigCache servletConfigCache = null;

    /**
     * 构造方法
     */
    private ServletConfigCache() {
    }

    /**
     * 初始化 服务者配置
     */
    public static synchronized void initServletConfigCache() {
        if (servletConfigCache == null) {
            servletConfigCache = new ServletConfigCache();
        }
    }

    /**
     * 获取 服务者配置缓存
     *
     * @return 服务者配置缓存
     */
    public synchronized static ServletConfigCache getServletConfigCache() {
        if (servletConfigCache == null) {
            initServletConfigCache();
        }
        return servletConfigCache;
    }

    /**
     * 添加 标签
     *
     * @param key  键
     * @param tags 标签 集合
     */
    public void addTags(String key, List<ServletTag> tags) {
        ServletConfigCache.tags.put(key, tags);
    }

    /**
     * 获取 标签 集合
     *
     * @param key 键
     * @return 标签 集合
     */
    public List<ServletTag> getTags(String key) {
        return tags.get(key);
    }

    /**
     * 获取 标签 键键值
     *
     * @return 标签 键键值
     */
    public Map<String, List<ServletTag>> getTags() {
        return Collections.unmodifiableMap(tags);
    }

    /**
     * 移除 标签
     *
     * @param key 键
     */
    public void removeTag(String key) {
        tags.remove(key);
    }

    /**
     * 大小
     *
     * @return 大小
     */
    public int size() {
        return tags.size();
    }

    /**
     * 清除 标签
     */
    public void clearTags() {
        tags.clear();
    }

}
